"""
自定义权限验证
"""
from rest_framework import permissions


class HasPermission(permissions.BasePermission):
    """
    自定义权限验证类
    检查用户是否有指定的权限
    """
    
    def __init__(self, required_permission):
        self.required_permission = required_permission
    
    def has_permission(self, request, view):
        # 超级管理员拥有所有权限
        if request.user.is_superuser:
            return True
        
        # 检查用户是否有 profile 和 role
        if not hasattr(request.user, 'profile') or not request.user.profile.role:
            return False
        
        # 检查角色是否启用
        role = request.user.profile.role
        if not role.is_active:
            return False
        
        # 检查权限列表
        user_permissions = role.permissions or []
        
        # 检查是否有所需权限
        return self.required_permission in user_permissions


def has_permission(user, permission):
    """
    检查用户是否有指定权限的工具函数
    
    Args:
        user: 用户对象
        permission: 权限字符串，如 'user.view'
    
    Returns:
        bool: 是否有权限
    """
    # 超级管理员拥有所有权限
    if user.is_superuser:
        return True
    
    # 检查用户是否有 profile 和 role
    if not hasattr(user, 'profile') or not user.profile.role:
        return False
    
    # 检查角色是否启用
    role = user.profile.role
    if not role.is_active:
        return False
    
    # 检查权限列表
    user_permissions = role.permissions or []
    
    # 检查是否有所需权限
    return permission in user_permissions


def check_permissions(user, permissions):
    """
    检查用户是否有多个权限中的任意一个
    
    Args:
        user: 用户对象
        permissions: 权限列表，如 ['user.view', 'user.create']
    
    Returns:
        bool: 是否有任意一个权限
    """
    for permission in permissions:
        if has_permission(user, permission):
            return True
    return False


def get_user_permissions(user):
    """
    获取用户的所有权限
    
    Args:
        user: 用户对象
    
    Returns:
        list: 权限列表
    """
    # 超级管理员返回所有权限
    if user.is_superuser:
        return [
            'user.view', 'user.create', 'user.edit', 'user.delete',
            'role.view', 'role.create', 'role.edit', 'role.delete',
            'config.view', 'config.edit',
            'log.view', 'log.export'
        ]
    
    # 检查用户是否有 profile 和 role
    if not hasattr(user, 'profile') or not user.profile.role:
        return []
    
    # 检查角色是否启用
    role = user.profile.role
    if not role.is_active:
        return []
    
    return role.permissions or []

